/*
 * Allwinner SoCs display driver.
 *
 * Copyright (C) 2016 Allwinner.
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#ifndef __DE_DSI_TYPE_H__
#define __DE_DSI_TYPE_H__

#include "de_lcd.h"

/*  */
/* Detail information of registers */
/*  */
typedef union {
	u32 dwval;
	struct {
		u32 dsi_en                     :  1;    /* default: 0; */
		u32 res0                       : 31;    /* default:; */
	} bits;
} dsi_ctl_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 dsi_irq_en				 : 16;    /* default: 0; */
		u32 dsi_irq_flag               : 16;    /* default: 0; */
	} bits;
} dsi_gint0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 video_line_int_num         : 13;    /* Default: 0; */
		u32 res0                       : 19;    /* Default:; */
	} bits;
} dsi_gint1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 video_mode_burst           :  1;    /* default: 0; */
		u32 hsa_hse_dis                :  1;    /* default: 0; */
		u32 hbp_dis                    :  1;    /* default: 0; */
		u32 trail_fill				 :  1;	   /* default: 0; */
		u32 trail_inv				 :  4;	   /* default: 0; */
		u32 res0                       :  8;    /* default: 0; */
		u32 brdy_set			         :  8;    /* default: 0; */
		u32 brdy_l_sel		         :  3;    /* default: 0; */
		u32 res1		                 :  5;    /* default: 0; */
	} bits;
} dsi_basic_ctl_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 inst_st                    :  1;    /* default: 0; */
		u32 res0                       :  3;    /* default:; */
		u32 src_sel                    :  2;    /* default: 0; */
		u32 res1                       :  4;    /* default:; */
		u32 fifo_manual_reset          :  1;    /* default: 0; */
		u32 res2                       :  1;    /* default:; */
		u32 fifo_gating                :  1;    /* default: 0; */
		u32 res3                       :  3;    /* default:; */
		u32 ecc_en                     :  1;    /* default: 0; */
		u32 crc_en                     :  1;    /* default: 0; */
		u32 hs_eotp_en                 :  1;    /* default: 0; */
		u32 res4                       : 13;    /* default:; */
	} bits;
} dsi_basic_ctl0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 dsi_mode                   :  1;    /* default: 0; */
		u32 video_frame_start          :  1;    /* default: 0; */
		u32 video_precision_mode_align :  1;    /* default: 0; */
		u32 res0                       :  1;    /* default:; */
		u32 video_start_delay          : 13;    /* default: 0; */
		u32 res1                       : 15;    /* default: 0; */
	} bits;
} dsi_basic_ctl1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 vsa                  : 12;    /* default: 0; */
		u32 res0                       :  4;    /* default:; */
		u32 vbp                  : 12;    /* default: 0; */
		u32 res1                       :  4;    /* default:; */
	} bits;
} dsi_basic_size0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 vact                 : 12;    /* default: 0; */
		u32 res0                       :  4;    /* default:; */
		u32 vt                   : 13;    /* default: 0; */
		u32 res1                       :  3;    /* default:; */
	} bits;
} dsi_basic_size1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lane_den                   :  4;    /* default: 0; */
		u32 lane_cen                   :  1;    /* default: 0; */
		u32 res0                       : 11;    /* default:; */
		u32 trans_start_condition      :  4;    /* default: 0; */
		u32 trans_packet               :  4;    /* default: 0; */
		u32 escape_enrty               :  4;    /* default: 0; */
		u32 instru_mode                :  4;    /* default: 0; */
	} bits;
} dsi_basic_inst0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 inst0_sel                  :  4;    /* default: 0; */
		u32 inst1_sel                  :  4;    /* default: 0; */
		u32 inst2_sel                  :  4;    /* default: 0; */
		u32 inst3_sel                  :  4;    /* default: 0; */
		u32 inst4_sel                  :  4;    /* default: 0; */
		u32 inst5_sel                  :  4;    /* default: 0; */
		u32 inst6_sel                  :  4;    /* default: 0; */
		u32 inst7_sel                  :  4;    /* default: 0; */
	} bits;
} dsi_basic_inst1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 loop_n0                    : 12;    /* default: 0; */
		u32 res0                       :  4;    /* default:; */
		u32 loop_n1                    : 12;    /* default: 0; */
		u32 res1                       :  4;    /* default:; */
	} bits;
} dsi_basic_inst2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 inst0_jump                 :  4;    /* default: 0; */
		u32 inst1_jump                 :  4;    /* default: 0; */
		u32 inst2_jump                 :  4;    /* default: 0; */
		u32 inst3_jump                 :  4;    /* default: 0; */
		u32 inst4_jump                 :  4;    /* default: 0; */
		u32 inst5_jump                 :  4;    /* default: 0; */
		u32 inst6_jump                 :  4;    /* default: 0; */
		u32 inst7_jump                 :  4;    /* default: 0; */
	} bits;
} dsi_basic_inst3_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 jump_cfg_num              : 16;    /* default: 0; */
		u32 jump_cfg_point            :  4;    /* default: 0; */
		u32 jump_cfg_to               :  4;    /* default: 0; */
		u32 res0                       :  4;    /* default:; */
		u32 jump_cfg_en               :  1;    /* default: 0; */
		u32 res1                       :  3;    /* default:; */
	} bits;
} dsi_basic_inst4_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 trans_start_set            : 13;    /* default: 0; */
		u32 res0                       : 19;    /* default:; */
	} bits;
} dsi_basic_tran0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 trans_size                 : 16;    /* default: 0; */
		u32 res0                       : 12;    /* default:; */
		u32 trans_end_condition        :  1;    /* default: 0; */
		u32 res1                       :  3;    /* default:; */
	} bits;
} dsi_basic_tran1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 trans_cycle_set            : 16;    /* default: 0; */
		u32 res0                       : 16;    /* default:; */
	} bits;
} dsi_basic_tran2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 trans_blank_set            : 16;    /* default: 0; */
		u32 res0                       : 16;    /* default:; */
	} bits;
} dsi_basic_tran3_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 hs_zero_reduce_set         : 16;    /* default: 0; */
		u32 res0                       : 16;    /* default:; */
	} bits;
} dsi_basic_tran4_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 drq_set			         : 10;    /* default: 0; */
		u32 res0                       : 18;    /* default:; */
		u32 drq_mode			         :  1;    /* default: 0; */
		u32 res1                       :  3;    /* default:; */
	} bits;
} dsi_basic_tran5_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 pixel_format               :  4;    /* default: 0; */
		u32 pixel_endian               :  1;    /* default: 0; */
		u32 res0                       : 11;    /* default:; */
		u32 pd_plug_dis                :  1;    /* default: 0; */
		u32 res1                       : 15;    /* default:; */
	} bits;
} dsi_pixel_ctl0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 res0;    /* default:; */
	} bits;
} dsi_pixel_ctl1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 dt                         :  6;    /* default: 0; */
		u32 vc                         :  2;    /* default: 0; */
		u32 wc                         : 16;    /* default: 0; */
		u32 ecc                        :  8;    /* default: 0; */
	} bits;
} dsi_pixel_ph_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 pd_tran0                   :  8;    /* default: 0; */
		u32 res0                       :  8;    /* default:; */
		u32 pd_trann                   :  8;    /* default: 0; */
		u32 res1                       :  8;    /* default:; */
	} bits;
} dsi_pixel_pd_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 crc_force                  : 16;    /* default: 0; */
		u32 res0                       : 16;    /* default:; */
	} bits;
} dsi_pixel_pf0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 crc_init_line0             : 16;    /* default: 0xffff; */
		u32 crc_init_linen             : 16;    /* default: 0xffff; */
	} bits;
} dsi_pixel_pf1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 dt                         :  6;    /* default: 0; */
		u32 vc                         :  2;    /* default: 0; */
		u32 d0                         :  8;    /* default: 0; */
		u32 d1                         :  8;    /* default: 0; */
		u32 ecc                        :  8;    /* default: 0; */
	} bits;
} dsi_short_pkg_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 dt                         :  6;    /* default: 0; */
		u32 vc                         :  2;    /* default: 0; */
		u32 wc                         :  16;    /* default: 0; */
		u32 ecc                        :  8;    /* default: 0; */
	} bits;
} dsi_blk_pkg0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 pd			     :  8;    /* default: 0; */
		u32 res0                       :  8;    /* default:; */
		u32 pf				 : 16;    /* default: 0; */
	} bits;
} dsi_blk_pkg1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 line_num		     : 16;    /* default: 0; */
		u32 line_syncpoint             : 16;    /* default: 0; */
	} bits;
} dsi_burst_line_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 drq_edge0		     : 16;    /* default: 0; */
		u32 drq_edge1		             : 16;    /* default: 0; */
	} bits;
} dsi_burst_drq_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 tx_size                    :  8;    /* default: 0; */
		u32 tx_status                  :  1;    /* default: 0; */
		u32 tx_flag                    :  1;    /* default: 0; */
		u32 res0                       :  6;    /* default:; */
		u32 rx_size                    :  5;    /* default: 0; */
		u32 res1                       :  3;    /* default:; */
		u32 rx_status                  :  1;    /* default: 0; */
		u32 rx_flag                    :  1;    /* default: 0; */
		u32 rx_overflow                :  1;    /* default: 0; */
		u32 res2                       :  5;    /* default:; */
	} bits;
} dsi_cmd_ctl_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 byte0						 :  8;    /* default: 0; */
		u32 byte1                      :  8;    /* default: 0; */
		u32 byte2                      :  8;    /* default: 0; */
		u32 byte3                      :  8;    /* default: 0; */
	} bits;
} dsi_cmd_data_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 video_curr_line            : 13;    /* default: 0; */
		u32 res0                       : 19;    /* default:; */
	} bits;
} dsi_debug0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 video_curr_lp2hs           : 16;    /* default: 0; */
		u32 res0                       : 16;    /* default:; */
	} bits;
} dsi_debug1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 trans_low_flag             :  1;    /* default: 0; */
		u32 trans_fast_flag            :  1;    /* default: 0; */
		u32 res0                       :  2;    /* default:; */
		u32 curr_loop_num              : 16;    /* default: 0; */
		u32 curr_instru_num            :  3;    /* default: 0; */
		u32 res1                       :  1;    /* default:; */
		u32 instru_unknow_flag         :  8;    /* default: 0; */
	} bits;
} dsi_debug2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 res0                       : 16;    /* default:; */
		u32 curr_fifo_num              : 16;    /* default: 0; */
	} bits;
} dsi_debug3_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 test_data                  : 24;    /* default: 0; */
		u32 res0                       :  4;    /* default:; */
		u32 dsi_fifo_bist_en           :  1;    /* default: 0; */
		u32 res1                       :  3;    /* default:; */
	} bits;
} dsi_debug4_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 res0;    /* Default:; */
	} bits;
} dsi_reservd_reg_t;

/* device define */
typedef struct {
	dsi_ctl_reg_t				dsi_gctl;					/* 0x000 */
	dsi_gint0_reg_t				dsi_gint0;					/* 0x004 */
	dsi_gint1_reg_t				dsi_gint1;					/* 0x008 */
	dsi_basic_ctl_reg_t			dsi_basic_ctl;				/* 0x00c */
	dsi_basic_ctl0_reg_t		dsi_basic_ctl0;				/* 0x010 */
	dsi_basic_ctl1_reg_t		dsi_basic_ctl1;				/* 0x014 */
	dsi_basic_size0_reg_t		dsi_basic_size0;			/* 0x018 */
	dsi_basic_size1_reg_t		dsi_basic_size1;			/* 0x01c */
	dsi_basic_inst0_reg_t		dsi_inst_func[8];			/* 0x020~0x03c */
	dsi_basic_inst1_reg_t		dsi_inst_loop_sel;			/* 0x040 */
	dsi_basic_inst2_reg_t		dsi_inst_loop_num;			/* 0x044 */
	dsi_basic_inst3_reg_t		dsi_inst_jump_sel;			/* 0x048 */
	dsi_basic_inst4_reg_t		dsi_inst_jump_cfg[2];		/* 0x04c~0x050 */
	dsi_basic_inst2_reg_t		dsi_inst_loop_num2;			/* 0x054 */
	dsi_reservd_reg_t			dsi_reg058[2];				/* 0x058~0x05c */
	dsi_basic_tran0_reg_t		dsi_trans_start;			/* 0x060 */
	dsi_reservd_reg_t			dsi_reg064[5];				/* 0x064~0x074 */
	dsi_basic_tran4_reg_t		dsi_trans_zero;				/* 0x078 */
	dsi_basic_tran5_reg_t		dsi_tcon_drq;				/* 0x07c */
	dsi_pixel_ctl0_reg_t		dsi_pixel_ctl0;				/* 0x080 */
	dsi_pixel_ctl1_reg_t		dsi_pixel_ctl1;				/* 0x084 */
	dsi_reservd_reg_t			dsi_reg088[2];				/* 0x088~0x08c */
	dsi_pixel_ph_reg_t			dsi_pixel_ph;				/* 0x090 */
	dsi_pixel_pd_reg_t			dsi_pixel_pd;				/* 0x094 */
	dsi_pixel_pf0_reg_t			dsi_pixel_pf0;				/* 0x098 */
	dsi_pixel_pf1_reg_t			dsi_pixel_pf1;				/* 0x09c */
	dsi_reservd_reg_t			dsi_reg0a0[4];				/* 0x0a0~0x0ac */
	dsi_short_pkg_reg_t			dsi_sync_hss;				/* 0x0b0 */
	dsi_short_pkg_reg_t			dsi_sync_hse;				/* 0x0b4 */
	dsi_short_pkg_reg_t			dsi_sync_vss;				/* 0x0b8 */
	dsi_short_pkg_reg_t			dsi_sync_vse;				/* 0x0bc */
	dsi_blk_pkg0_reg_t			dsi_blk_hsa0;				/* 0x0c0 */
	dsi_blk_pkg1_reg_t			dsi_blk_hsa1;				/* 0x0c4 */
	dsi_blk_pkg0_reg_t			dsi_blk_hbp0;				/* 0x0c8 */
	dsi_blk_pkg1_reg_t			dsi_blk_hbp1;				/* 0x0cc */
	dsi_blk_pkg0_reg_t			dsi_blk_hfp0;				/* 0x0d0 */
	dsi_blk_pkg1_reg_t			dsi_blk_hfp1;				/* 0x0d4 */
	dsi_reservd_reg_t			dsi_reg0d8[2];				/* 0x0d8~0x0dc */
	dsi_blk_pkg0_reg_t			dsi_blk_hblk0;				/* 0x0e0 */
	dsi_blk_pkg1_reg_t			dsi_blk_hblk1;				/* 0x0e4 */
	dsi_blk_pkg0_reg_t			dsi_blk_vblk0;				/* 0x0e8 */
	dsi_blk_pkg1_reg_t			dsi_blk_vblk1;				/* 0x0ec */
	dsi_burst_line_reg_t		dsi_burst_line;				/* 0x0f0 */
	dsi_burst_drq_reg_t			dsi_burst_drq;				/* 0x0f4 */
	dsi_reservd_reg_t			dsi_reg0f0[66];				/* 0x0f8~0x1fc */
	dsi_cmd_ctl_reg_t			dsi_cmd_ctl;				/* 0x200 */
	dsi_reservd_reg_t			dsi_reg204[15];				/* 0x204~0x23c */
	dsi_cmd_data_reg_t			dsi_cmd_rx[8];				/* 0x240~0x25c */
	dsi_reservd_reg_t			dsi_reg260[32];				/* 0x260~0x2dc */
	dsi_debug0_reg_t			dsi_debug_video0;			/* 0x02e0 */
	dsi_debug1_reg_t			dsi_debug_video1;			/* 0x02e4 */
	dsi_reservd_reg_t			dsi_reg2e8[2];				/* 0x2e8~0x2ec */
	dsi_debug2_reg_t			dsi_debug_inst;				/* 0x2f0 */
	dsi_debug3_reg_t			dsi_debug_fifo;				/* 0x2f4 */
	dsi_debug4_reg_t			dsi_debug_data;				/* 0x2f8 */
	dsi_reservd_reg_t			dsi_reg2fc;					/* 0x2fc */
	dsi_cmd_data_reg_t			dsi_cmd_tx[64];				/* 0x300 */
} __de_dsi_dev_t;

typedef union {
	u32 dwval;
	struct {
		u32 module_en           :  1;    /* default: 0; */
		u32 res0                :  3;    /* default:; */
		u32 lane_num            :  2;    /* default: 0; */
		u32 res1                : 26;    /* default:; */
	} bits;
} dphy_ctl_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 tx_d0_force         :  1;    /* default: 0; */
		u32 tx_d1_force         :  1;    /* default: 0; */
		u32 tx_d2_force         :  1;    /* default: 0; */
		u32 tx_d3_force         :  1;    /* default: 0; */
		u32 tx_clk_force        :  1;    /* default: 0; */
		u32 res0                :  3;    /* default:; */
		u32 lptx_endian         :  1;    /* default: 0; */
		u32 hstx_endian         :  1;    /* default: 0; */
		u32 lptx_8b9b_en        :  1;    /* default: 0; */
		u32 hstx_8b9b_en        :  1;    /* default: 0; */
		u32 force_lp11          :  1;    /* default: 0; */
		u32 res1                :  3;    /* default:; */
		u32 ulpstx_data0_exit   :  1;    /* default: 0; */
		u32 ulpstx_data1_exit   :  1;    /* default: 0; */
		u32 ulpstx_data2_exit   :  1;    /* default: 0; */
		u32 ulpstx_data3_exit   :  1;    /* default: 0; */
		u32 ulpstx_clk_exit     :  1;    /* default: 0; */
		u32 res2                :  3;    /* default:; */
		u32 hstx_data_exit      :  1;    /* default: 0; */
		u32 hstx_clk_exit       :  1;    /* default: 0; */
		u32 res3                :  2;    /* default:; */
		u32 hstx_clk_cont       :  1;    /* default: 0; */
		u32 ulpstx_enter        :  1;    /* default: 0; */
		u32 res4                :  2;    /* default:; */
	} bits;
} dphy_tx_ctl_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 res0                :  8;    /* default:; */
		u32 lprx_endian         :  1;    /* default: 0; */
		u32 hsrx_endian         :  1;    /* default: 0; */
		u32 lprx_8b9b_en        :  1;    /* default: 0; */
		u32 hsrx_8b9b_en        :  1;    /* default: 0; */
		u32 hsrx_sync           :  1;    /* default: 0; */
		u32 res1                :  3;    /* default:; */
		u32 lprx_trnd_mask      :  4;    /* default: 0; */
		u32 rx_d0_force         :  1;    /* default: 0; */
		u32 rx_d1_force         :  1;    /* default: 0; */
		u32 rx_d2_force         :  1;    /* default: 0; */
		u32 rx_d3_force         :  1;    /* default: 0; */
		u32 rx_clk_force        :  1;    /* default: 0; */
		u32 res2                :  6;    /* default:; */
		u32 dbc_en              :  1;    /* default: 0; */
	} bits;
} dphy_rx_ctl_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lpx_tm_set          :  8;    /* default: 0; */
		u32 dterm_set           :  8;    /* default: 0; */
		u32 hs_pre_set          :  8;    /* default: 0; */
		u32 hs_trail_set        :  8;    /* default: 0; */
	} bits;
} dphy_tx_time0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 ck_prep_set         :  8;    /* default: 0; */
		u32 ck_zero_set         :  8;    /* default: 0; */
		u32 ck_pre_set          :  8;    /* default: 0; */
		u32 ck_post_set         :  8;    /* default: 0; */
	} bits;
} dphy_tx_time1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 ck_trail_set        :  8;    /* default: 0; */
		u32 hs_dly_set          : 16;    /* default: 0; */
		u32 res0                :  4;    /* default:; */
		u32 hs_dly_mode         :  1;    /* default: 0; */
		u32 res1                :  3;    /* default:; */
	} bits;
} dphy_tx_time2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lptx_ulps_exit_set  : 20;    /* default: 0; */
		u32 res0                : 12;    /* default:; */
	} bits;
} dphy_tx_time3_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 hstx_ana0_set       :  8;    /* default: 1; */
		u32 hstx_ana1_set       :  8;    /* default: 1; */
		u32 res0                : 16;    /* default:; */
	} bits;
} dphy_tx_time4_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lprx_to_en          :  1;    /* default: 0; */
		u32 freq_cnt_en         :  1;    /* default: 0; */
		u32 res0                :  2;    /* default:; */
		u32 hsrx_clk_miss_en    :  1;    /* default: 0; */
		u32 hsrx_sync_err_to_en :  1;    /* default: 0; */
		u32 res1                :  2;    /* default:; */
		u32 lprx_to             :  8;    /* default: 0; */
		u32 hsrx_clk_miss       :  8;    /* default: 0; */
		u32 hsrx_sync_err_to    :  8;    /* default: 0; */
	} bits;
} dphy_rx_time0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lprx_ulps_wp        : 20;    /* default: 0; */
		u32 rx_dly              : 12;    /* default: 0; */
	} bits;
} dphy_rx_time1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 hsrx_ana0_set       :  8;    /* default: 0; */
		u32 hsrx_ana1_set       :  8;    /* default: 0; */
		u32 res0                : 16;    /* default:; */
	} bits;
} dphy_rx_time2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 freq_cnt            : 16;    /* default: 0; */
		u32 res0                :  8;    /* default:; */
		u32 lprst_dly           :  8;    /* default: 0; */
	} bits;
} dphy_rx_time3_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 reg_selsck          :  1;    /* default: 0; */
		u32 reg_rsd             :  1;    /* default: 0; */
		u32 reg_sfb             :  2;    /* default: 0; */
		u32 reg_plr             :  4;    /* default: 0; */
		u32 reg_den             :  4;    /* default: 0; */
		u32 reg_slv             :  3;    /* default: 0; */
		u32 reg_sdiv2           :  1;    /* default: 0; */
		u32 reg_srxck           :  4;    /* default: 0; */
		u32 reg_srxdt           :  4;    /* default: 0; */
		u32 reg_dmpd            :  4;    /* default: 0; */
		u32 reg_dmpc            :  1;    /* default: 0; */
		u32 reg_pwenc           :  1;    /* default: 0; */
		u32 reg_pwend           :  1;    /* default: 0; */
		u32 reg_pws             :  1;    /* default: 0; */
	} bits;
} dphy_ana0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 reg_stxck           :  1;    /* default: 0; */
		u32 res0                :  3;    /* default:; */
		u32 reg_svdl0           :  4;    /* default: 0; */
		u32 reg_svdl1           :  4;    /* default: 0; */
		u32 reg_svdl2           :  4;    /* default: 0; */
		u32 reg_svdl3           :  4;    /* default: 0; */
		u32 reg_svdlc           :  4;    /* default: 0; */
		u32 reg_svtt            :  4;    /* default: 0; */
		u32 reg_csmps           :  2;    /* default: 0; */
		u32 res1                :  1;    /* default:; */
		u32 reg_vttmode         :  1;    /* default:; */
	} bits;
} dphy_ana1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 ana_cpu_en          :  1;    /* default: 0; */
		u32 enib                :  1;    /* default: 0; */
		u32 enrvs               :  1;    /* default: 0; */
		u32 res0                :  1;    /* default:; */
		u32 enck_cpu            :  1;    /* default: 0; */
		u32 entxc_cpu           :  1;    /* default: 0; */
		u32 enckq_cpu           :  1;    /* default: 0; */
		u32 res1                :  1;    /* default:; */
		u32 entx_cpu            :  4;    /* default: 0; */
		u32 res2                :  1;    /* default:; */
		u32 entermc_cpu         :  1;    /* default: 0; */
		u32 enrxc_cpu           :  1;    /* default: 0; */
		u32 res3                :  1;    /* default:; */
		u32 enterm_cpu          :  4;    /* default: 0; */
		u32 enrx_cpu            :  4;    /* default: 0; */
		u32 enp2s_cpu           :  4;    /* default: 0; */
		u32 res4                :  4;    /* default:; */
	} bits;
} dphy_ana2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 enlptx_cpu          :  4;    /* default: 0; */
		u32 enlprx_cpu          :  4;    /* default: 0; */
		u32 enlpcd_cpu          :  4;    /* default: 0; */
		u32 enlprxc_cpu         :  1;    /* default: 0; */
		u32 enlptxc_cpu         :  1;    /* default: 0; */
		u32 enlpcdc_cpu         :  1;    /* default: 0; */
		u32 res0                :  1;    /* default:; */
		u32 entest              :  1;    /* default: 0; */
		u32 enckdbg             :  1;    /* default: 0; */
		u32 enldor              :  1;    /* default: 0; */
		u32 res1                :  5;    /* default:; */
		u32 enldod              :  1;    /* default: 0; */
		u32 enldoc              :  1;    /* default: 0; */
		u32 endiv               :  1;    /* default: 0; */
		u32 envttc              :  1;    /* default: 0; */
		u32 envttd              :  4;    /* default: 0; */
	} bits;
} dphy_ana3_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 reg_txpusd          :  2;    /* default: 0; */
		u32 reg_txpusc          :  2;    /* default: 0; */
		u32 reg_txdnsd          :  2;    /* default: 0; */
		u32 reg_txdnsc          :  2;    /* default: 0; */
		u32 reg_tmsd            :  2;    /* default: 0; */
		u32 reg_tmsc            :  2;    /* default: 0; */
		u32 reg_ckdv            :  5;    /* default: 0; */
		u32 res0                :  3;    /* default:; */
		u32 reg_dmplvd		  :  4;
		u32 reg_dmplvc		  :  1;
		u32 res1				  :  7;

	} bits;
} dphy_ana4_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 sot_d0_int          :  1;    /* default: 0x0; */
		u32 sot_d1_int          :  1;    /* default: 0x0; */
		u32 sot_d2_int          :  1;    /* default: 0x0; */
		u32 sot_d3_int          :  1;    /* default: 0x0; */
		u32 sot_err_d0_int      :  1;    /* default: 0x0; */
		u32 sot_err_d1_int      :  1;    /* default: 0x0; */
		u32 sot_err_d2_int      :  1;    /* default: 0x0; */
		u32 sot_err_d3_int      :  1;    /* default: 0x0; */
		u32 sot_sync_err_d0_int :  1;    /* default: 0x0; */
		u32 sot_sync_err_d1_int :  1;    /* default: 0x0; */
		u32 sot_sync_err_d2_int :  1;    /* default: 0x0; */
		u32 sot_sync_err_d3_int :  1;    /* default: 0x0; */
		u32 rx_alg_err_d0_int   :  1;    /* default: 0x0; */
		u32 rx_alg_err_d1_int   :  1;    /* default: 0x0; */
		u32 rx_alg_err_d2_int   :  1;    /* default: 0x0; */
		u32 rx_alg_err_d3_int   :  1;    /* default: 0x0; */
		u32 res0                :  6;    /* default:; */
		u32 cd_lp0_err_clk_int  :  1;    /* default: 0x0; */
		u32 cd_lp1_err_clk_int  :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d0_int   :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d0_int   :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d1_int   :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d1_int   :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d2_int   :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d2_int   :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d3_int   :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d3_int   :  1;    /* default: 0x0; */
	} bits;
} dphy_int_en0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 ulps_d0_int         :  1;    /* default: 0x0; */
		u32 ulps_d1_int         :  1;    /* default: 0x0; */
		u32 ulps_d2_int         :  1;    /* default: 0x0; */
		u32 ulps_d3_int         :  1;    /* default: 0x0; */
		u32 ulps_wp_d0_int      :  1;    /* default: 0x0; */
		u32 ulps_wp_d1_int      :  1;    /* default: 0x0; */
		u32 ulps_wp_d2_int      :  1;    /* default: 0x0; */
		u32 ulps_wp_d3_int      :  1;    /* default: 0x0; */
		u32 ulps_clk_int        :  1;    /* default: 0x0; */
		u32 ulps_wp_clk_int     :  1;    /* default: 0x0; */
		u32 res0                :  2;    /* default:; */
		u32 lpdt_d0_int         :  1;    /* default: 0x0; */
		u32 rx_trnd_d0_int      :  1;    /* default: 0x0; */
		u32 tx_trnd_err_d0_int  :  1;    /* default: 0x0; */
		u32 undef1_d0_int       :  1;    /* default: 0x0; */
		u32 undef2_d0_int       :  1;    /* default: 0x0; */
		u32 undef3_d0_int       :  1;    /* default: 0x0; */
		u32 undef4_d0_int       :  1;    /* default: 0x0; */
		u32 undef5_d0_int       :  1;    /* default: 0x0; */
		u32 rst_d0_int          :  1;    /* default: 0x0; */
		u32 rst_d1_int          :  1;    /* default: 0x0; */
		u32 rst_d2_int          :  1;    /* default: 0x0; */
		u32 rst_d3_int          :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d0_int  :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d1_int  :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d2_int  :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d3_int  :  1;    /* default: 0x0; */
		u32 false_ctl_d0_int    :  1;    /* default: 0x0; */
		u32 false_ctl_d1_int    :  1;    /* default: 0x0; */
		u32 false_ctl_d2_int    :  1;    /* default: 0x0; */
		u32 false_ctl_d3_int    :  1;    /* default: 0x0; */
	} bits;
} dphy_int_en1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 res0;    /* default:; */
	} bits;
} dphy_int_en2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 sot_d0_pd           :  1;    /* default: 0x0; */
		u32 sot_d1_pd           :  1;    /* default: 0x0; */
		u32 sot_d2_pd           :  1;    /* default: 0x0; */
		u32 sot_d3_pd           :  1;    /* default: 0x0; */
		u32 sot_err_d0_pd       :  1;    /* default: 0x0; */
		u32 sot_err_d1_pd       :  1;    /* default: 0x0; */
		u32 sot_err_d2_pd       :  1;    /* default: 0x0; */
		u32 sot_err_d3_pd       :  1;    /* default: 0x0; */
		u32 sot_sync_err_d0_pd  :  1;    /* default: 0x0; */
		u32 sot_sync_err_d1_pd  :  1;    /* default: 0x0; */
		u32 sot_sync_err_d2_pd  :  1;    /* default: 0x0; */
		u32 sot_sync_err_d3_pd  :  1;    /* default: 0x0; */
		u32 rx_alg_err_d0_pd    :  1;    /* default: 0x0; */
		u32 rx_alg_err_d1_pd    :  1;    /* default: 0x0; */
		u32 rx_alg_err_d2_pd    :  1;    /* default: 0x0; */
		u32 rx_alg_err_d3_pd    :  1;    /* default: 0x0; */
		u32 res0                :  6;    /* default:; */
		u32 cd_lp0_err_clk_pd   :  1;    /* default: 0x0; */
		u32 cd_lp1_err_clk_pd   :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d1_pd    :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d1_pd    :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d0_pd    :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d0_pd    :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d2_pd    :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d2_pd    :  1;    /* default: 0x0; */
		u32 cd_lp0_err_d3_pd    :  1;    /* default: 0x0; */
		u32 cd_lp1_err_d3_pd    :  1;    /* default: 0x0; */
	} bits;
} dphy_int_pd0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 ulps_d0_pd          :  1;    /* default: 0x0; */
		u32 ulps_d1_pd          :  1;    /* default: 0x0; */
		u32 ulps_d2_pd          :  1;    /* default: 0x0; */
		u32 ulps_d3_pd          :  1;    /* default: 0x0; */
		u32 ulps_wp_d0_pd       :  1;    /* default: 0x0; */
		u32 ulps_wp_d1_pd       :  1;    /* default: 0x0; */
		u32 ulps_wp_d2_pd       :  1;    /* default: 0x0; */
		u32 ulps_wp_d3_pd       :  1;    /* default: 0x0; */
		u32 ulps_clk_pd         :  1;    /* default: 0x0; */
		u32 ulps_wp_clk_pd      :  1;    /* default: 0x0; */
		u32 res0                :  2;    /* default:; */
		u32 lpdt_d0_pd          :  1;    /* default: 0x0; */
		u32 rx_trnd_d0_pd       :  1;    /* default: 0x0; */
		u32 tx_trnd_err_d0_pd   :  1;    /* default: 0x0; */
		u32 undef1_d0_pd        :  1;    /* default: 0x0; */
		u32 undef2_d0_pd        :  1;    /* default: 0x0; */
		u32 undef3_d0_pd        :  1;    /* default: 0x0; */
		u32 undef4_d0_pd        :  1;    /* default: 0x0; */
		u32 undef5_d0_pd        :  1;    /* default: 0x0; */
		u32 rst_d0_pd           :  1;    /* default: 0x0; */
		u32 rst_d1_pd           :  1;    /* default: 0x0; */
		u32 rst_d2_pd           :  1;    /* default: 0x0; */
		u32 rst_d3_pd           :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d0_pd   :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d1_pd   :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d2_pd   :  1;    /* default: 0x0; */
		u32 esc_cmd_err_d3_pd   :  1;    /* default: 0x0; */
		u32 false_ctl_d0_pd     :  1;    /* default: 0x0; */
		u32 false_ctl_d1_pd     :  1;    /* default: 0x0; */
		u32 false_ctl_d2_pd     :  1;    /* default: 0x0; */
		u32 false_ctl_d3_pd     :  1;    /* default: 0x0; */
	} bits;
} dphy_int_pd1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 res0;    /* default:; */
	} bits;
} dphy_int_pd2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lptx_sta_d0         :  3;    /* default: 0; */
		u32 res0                :  1;    /* default:; */
		u32 lptx_sta_d1         :  3;    /* default: 0; */
		u32 res1                :  1;    /* default:; */
		u32 lptx_sta_d2         :  3;    /* default: 0; */
		u32 res2                :  1;    /* default:; */
		u32 lptx_sta_d3         :  3;    /* default: 0; */
		u32 res3                :  1;    /* default:; */
		u32 lptx_sta_clk        :  3;    /* default: 0; */
		u32 res4                :  9;    /* default:; */
		u32 direction           :  1;    /* default: 0; */
		u32 res5                :  3;    /* default:; */
	} bits;
} dphy_dbg0_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lptx_dbg_en         :  1;    /* default: 0; */
		u32 hstx_dbg_en         :  1;    /* default: 0; */
		u32 res0                :  2;    /* default:; */
		u32 lptx_set_d0         :  2;    /* default: 0; */
		u32 lptx_set_d1         :  2;    /* default: 0; */
		u32 lptx_set_d2         :  2;    /* default: 0; */
		u32 lptx_set_d3         :  2;    /* default: 0; */
		u32 lptx_set_ck         :  2;    /* default: 0; */
		u32 res1                : 18;    /* default:; */
	} bits;
} dphy_dbg1_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 hstx_data;    /* default: 0; */
	} bits;
} dphy_dbg2_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lprx_sta_d0         :  4;    /* default: 0; */
		u32 lprx_sta_d1         :  4;    /* default: 0; */
		u32 lprx_sta_d2         :  4;    /* default: 0; */
		u32 lprx_sta_d3         :  4;    /* default: 0; */
		u32 lprx_sta_clk        :  4;    /* default: 0; */
		u32 res0                : 12;    /* default:; */
	} bits;
} dphy_dbg3_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 lprx_phy_d0         :  2;    /* default: 0; */
		u32 lprx_phy_d1         :  2;    /* default: 0; */
		u32 lprx_phy_d2         :  2;    /* default: 0; */
		u32 lprx_phy_d3         :  2;    /* default: 0; */
		u32 lprx_phy_clk        :  2;    /* default: 0; */
		u32 res0                :  6;    /* default:; */
		u32 lpcd_phy_d0         :  2;    /* default: 0; */
		u32 lpcd_phy_d1         :  2;    /* default: 0; */
		u32 lpcd_phy_d2         :  2;    /* default: 0; */
		u32 lpcd_phy_d3         :  2;    /* default: 0; */
		u32 lpcd_phy_clk        :  2;    /* default: 0; */
		u32 res1                :  6;    /* default:; */
	} bits;
} dphy_dbg4_reg_t;

typedef union {
	u32 dwval;
	struct {
		u32 hsrx_data;    /* default: 0; */
	} bits;
} dphy_dbg5_reg_t;


typedef union {
	u32 dwval;
	struct {
		u32 res0;    /* Default:; */
	} bits;
} dphy_reservd_reg_t;

/* device define */
typedef struct {
	dphy_ctl_reg_t					dphy_gctl;			/* 0x000 */
	dphy_tx_ctl_reg_t				dphy_tx_ctl;		/* 0x004 */
	dphy_rx_ctl_reg_t				dphy_rx_ctl;		/* 0x008 */
	dphy_reservd_reg_t				dphy_reg00c;		/* 0x00c */
	dphy_tx_time0_reg_t				dphy_tx_time0;		/* 0x010 */
	dphy_tx_time1_reg_t				dphy_tx_time1;		/* 0x014 */
	dphy_tx_time2_reg_t				dphy_tx_time2;		/* 0x018 */
	dphy_tx_time3_reg_t				dphy_tx_time3;		/* 0x01c */
	dphy_tx_time4_reg_t				dphy_tx_time4;		/* 0x020 */
	dphy_reservd_reg_t				dphy_reg024[3];		/* 0x024~0x02c */
	dphy_rx_time0_reg_t				dphy_rx_time0;		/* 0x030 */
	dphy_rx_time1_reg_t				dphy_rx_time1;		/* 0x034 */
	dphy_rx_time2_reg_t				dphy_rx_time2;		/* 0x038 */
	dphy_reservd_reg_t				dphy_reg03c;		/* 0x03c */
	dphy_rx_time3_reg_t				dphy_rx_time3;		/* 0x040 */
	dphy_reservd_reg_t				dphy_reg044[2];		/* 0x044~0x048 */
	dphy_ana0_reg_t					dphy_ana0;			/* 0x04c */
	dphy_ana1_reg_t					dphy_ana1;			/* 0x050 */
	dphy_ana2_reg_t					dphy_ana2;			/* 0x054 */
	dphy_ana3_reg_t					dphy_ana3;			/* 0x058 */
	dphy_ana4_reg_t					dphy_ana4;			/* 0x05c */
	dphy_int_en0_reg_t				dphy_int_en0;		/* 0x060 */
	dphy_int_en1_reg_t				dphy_int_en1;		/* 0x064 */
	dphy_int_en2_reg_t				dphy_int_en2;		/* 0x068 */
	dphy_reservd_reg_t				dphy_reg06c;		/* 0x06c */
	dphy_int_pd0_reg_t				dphy_int_pd0;		/* 0x070 */
	dphy_int_pd1_reg_t				dphy_int_pd1;		/* 0x074 */
	dphy_int_pd2_reg_t				dphy_int_pd2;		/* 0x078 */
	dphy_reservd_reg_t				dphy_reg07c[25];	/* 0x07c~0x0dc */
	dphy_dbg0_reg_t					dphy_dbg0;			/* 0xe0 */
	dphy_dbg1_reg_t					dphy_dbg1;			/* 0xe4 */
	dphy_dbg2_reg_t					dphy_dbg2;			/* 0xe8 */
	dphy_dbg3_reg_t					dphy_dbg3;			/* 0xec */
	dphy_dbg4_reg_t					dphy_dbg4;			/* 0xf0 */
	dphy_dbg5_reg_t					dphy_dbg5;			/* 0xf4 */
} __de_dsi_dphy_dev_t;





typedef union {
	struct {
		u32 byte012                    : 24;    /* default: 0; */
		u32 byte3			 :  8;    /* default: 0; */
	} bytes;
	struct {
		u32 bit00			 :  1;    /* default: 0; */
		u32 bit01			 :  1;    /* default: 0; */
		u32 bit02			 :  1;    /* default: 0; */
		u32 bit03			 :  1;    /* default: 0; */
		u32 bit04			 :  1;    /* default: 0; */
		u32 bit05			 :  1;    /* default: 0; */
		u32 bit06			 :  1;    /* default: 0; */
		u32 bit07			 :  1;    /* default: 0; */
		u32 bit08			 :  1;    /* default: 0; */
		u32 bit09			 :  1;    /* default: 0; */
		u32 bit10			 :  1;    /* default: 0; */
		u32 bit11			 :  1;    /* default: 0; */
		u32 bit12			 :  1;    /* default: 0; */
		u32 bit13			 :  1;    /* default: 0; */
		u32 bit14			 :  1;    /* default: 0; */
		u32 bit15			 :  1;    /* default: 0; */
		u32 bit16			 :  1;    /* default: 0; */
		u32 bit17			 :  1;    /* default: 0; */
		u32 bit18			 :  1;    /* default: 0; */
		u32 bit19			 :  1;    /* default: 0; */
		u32 bit20			 :  1;    /* default: 0; */
		u32 bit21			 :  1;    /* default: 0; */
		u32 bit22			 :  1;    /* default: 0; */
		u32 bit23			 :  1;    /* default: 0; */
		u32 bit24			 :  1;    /* default: 0; */
		u32 bit25			 :  1;    /* default: 0; */
		u32 bit26			 :  1;    /* default: 0; */
		u32 bit27			 :  1;    /* default: 0; */
		u32 bit28			 :  1;    /* default: 0; */
		u32 bit29			 :  1;    /* default: 0; */
		u32 bit30			 :  1;    /* default: 0; */
		u32 bit31			 :  1;    /* default: 0; */
	} bits;
} dsi_ph_t;
#endif
